window.onload = function () {

	/*---------------------------
	 Defaults for Reveal
	----------------------------*/

	/*---------------------------
	 Listener for data-reveal-id attributes
	----------------------------*/

  $('a[data-reveal-id]').on('click', function (e) {
    e.preventDefault();
    var modalLocation = $(this).attr('data-reveal-id');
    $('#' + modalLocation).reveal($(this).data());
  });

	/*---------------------------
	 Extend and Execute
	----------------------------*/

  $.fn.reveal = function (options) {
    var defaults = {
      animation: 'fadeAndPop', //fade, fadeAndPop, none
      animationspeed: 300, //how fast animtions are
      closeonbackgroundclick: true, //if you click background will modal close?
      dismissmodalclass: 'close-reveal-modal' //the class of a button or element that will close an open modal
    };

    //Extend dem' options
    var options = $.extend({}, defaults, options);

    return this.each(function () {

			/*---------------------------
			 Global Variables
			----------------------------*/
      var modal = $(this),
        //topMeasure  = parseInt(modal.css('top')),
        topMeasure = ($(window).height() - modal.height()) / 2 + 5,
        topOffset = modal.height() + topMeasure,
        locked = false,
        modalBG = $('.reveal-modal-bg');

			/*---------------------------
			 Create Modal BG
			----------------------------*/
      if (modalBG.length == 0) {
        modalBG = $('<div class="reveal-modal-bg" />').insertAfter(modal);
      }

			/*---------------------------
			 Open & Close Animations
			----------------------------*/
      //Entrance Animations
      modal.bind('reveal:open', function () {
        modalBG.unbind('click.modalEvent');
        $('.' + options.dismissmodalclass).unbind('click.modalEvent');
        if (!locked) {
          lockModal();
          if (options.animation == "fadeAndPop") {
            modal.css({ 'top': $(document).scrollTop() - topOffset, 'opacity': 0, 'display': 'block', 'position': 'fixed' });
            modalBG.fadeIn(options.animationspeed / 2);
            modal.delay(options.animationspeed / 2).animate({
              "top": $(document).scrollTop() + topMeasure + 'px',
              "opacity": 1
            }, options.animationspeed, unlockModal());
          }
          if (options.animation == "fade") {
            modal.css({ 'opacity': 0, 'display': 'block', 'top': $(document).scrollTop() + topMeasure });
            modalBG.fadeIn(options.animationspeed / 2);
            modal.delay(options.animationspeed / 2).animate({
              "opacity": 1
            }, options.animationspeed, unlockModal());
          }
          if (options.animation == "none") {
            modal.css({ 'display': 'block', 'top': $(document).scrollTop() + topMeasure });
            modalBG.css({ "display": "block" });
            unlockModal()
          }
        }
        modal.unbind('reveal:open');
      });

      //Closing Animation
      modal.bind('reveal:close', function () {
        if (!locked) {
          lockModal();
          if (options.animation == "fadeAndPop") {
            modalBG.delay(options.animationspeed).fadeOut(options.animationspeed);
            modal.animate({
              "top": $(document).scrollTop() - topOffset + 'px',
              "opacity": 0
            }, options.animationspeed / 2, function () {
              modal.css({ 'top': topMeasure, 'opacity': 1, 'display': 'none' });
              unlockModal();
            });
          }
          if (options.animation == "fade") {
            modalBG.delay(options.animationspeed).fadeOut(options.animationspeed);
            modal.animate({
              "opacity": 0
            }, options.animationspeed, function () {
              modal.css({ 'opacity': 1, 'display': 'none', 'top': topMeasure });
              unlockModal();
            });
          }
          if (options.animation == "none") {
            modal.css({ 'display': 'none', 'top': topMeasure });
            modalBG.css({ 'display': 'none' });
          }
        }
        modal.unbind('reveal:close');
      });

			/*---------------------------
			 Open and add Closing Listeners
			----------------------------*/
      //Open Modal Immediately
      modal.trigger('reveal:open')

      //Close Modal Listeners
      var closeButton = $('.' + options.dismissmodalclass).bind('click.modalEvent', function () {
        modal.trigger('reveal:close')
      });

      if (options.closeonbackgroundclick) {
        modalBG.css({ "cursor": "pointer" })
        modalBG.bind('click.modalEvent', function () {
          modal.trigger('reveal:close')
        });
      }
      $('body').keyup(function (e) {
        if (e.which === 27) { modal.trigger('reveal:close'); } // 27 is the keycode for the Escape key
      });


			/*---------------------------
			 Animations Locks
			----------------------------*/
      function unlockModal() {
        locked = false;
      }
      function lockModal() {
        locked = true;
      }

    });//each call
  }//orbit plugin call
}
